using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using UnityEngineInternal;

[System.Flags]
public enum MatchEffectFlag {
  Normal = 0,
  Chain = 1 << 0,
  Big = 1 << 1,
}

/* 这是一个位掩码（类似unity的LayerMask）
 * 因为一次消除可能同时满足多个规则（例如既是连锁又是大型）
 * 所以用一个位掩码来表示一次消除满足那些规则：
 * 比如现在定义从右起第1位是连锁，第2位是大型，那么1 = 0b01就是只有连锁，2 = 0b10就只有大型，而3 = 0b11是二者都有
 * System.Flags是C#对位掩码的一个语法糖，有[System.Flags]的枚举类型可以使用HasFlag来查询内容：
 * var flag = MatchEffectFlag.Chain;
 * if (flag.HasFlag(MatchEffectFlag.Big)) {
      检查flag中是否包含flag，如果第2位是1则为true
   }
   flag |= MatchEffectFlag.Big; //使用或运算符可将Big置1
   flag &= ~MatchEffectFlag.Chain; //使用与运算符可将Chain置0（注意要加~来让Chain置反）
   //这个时候flag 就变成了 MatchEffect.Big,
 */

public static class MatchEffectEntry {

  public static void OnMatch(MatchInfo matchInfo) {
    var flag = MatchEffectFlag.Normal;
    if (matchInfo.matchCount > 3) {
      flag |= MatchEffectFlag.Big;
    }
    if (matchInfo.generation > 0) {
      flag |= MatchEffectFlag.Chain;
    }

    LogMatch(flag, matchInfo);
  }

  private static void LogMatch(MatchEffectFlag flag, MatchInfo matchInfo) {
    StringBuilder text = new StringBuilder("");
    if (flag == MatchEffectFlag.Normal) {
      text.AppendLine("普通消除");
    } else {
      if (flag.HasFlag(MatchEffectFlag.Chain)) {
        text.Append("连锁 ");
      }
      if (flag.HasFlag(MatchEffectFlag.Big)) {
        text.Append("大型 ");
      }
      text.Append("\n");
    }

    text.AppendLine($"消除个数：{matchInfo.matchCount}");
    text.AppendLine($"消除种类：{matchInfo.ball.id}");

    Debug.Log(text.ToString());
  }
}
